package Lee_code;

/**
 * @author blh
 * @date 2024年08月02日 16:58
 */
public class Lee_516_82_2 {
    public int longestPalindromeSubseq(String s) {
        int len = s.length();
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        String temp = sb.toString();
        // 求最长公共字串, dp[i][j]表示s的0-i 和 temp的0-j 的最长公共字串
        int[][] dp = new int[len + 1][len + 1];
        // 初始化一下数组

        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                char s1 = s.charAt(i);
                char s2 = temp.charAt(j);
                if (s1 == s2) {
                    dp[i + 1][j + 1] = Math.max(dp[i + 1][j + 1], dp[i][j] + 1);
                } else {
                    dp[i + 1][j + 1] = Math.max(dp[i][j + 1], dp[i + 1][j]);
                }
            }
        }
        return dp[len][len];
    }
}
